package com.caishichang.infosysdesign.service;

import com.caishichang.infosysdesign.controller.vo.StrategyDetailVO;
import com.caishichang.infosysdesign.controller.vo.StrategyListVO;
import com.caishichang.infosysdesign.entity.Strategy;
import com.caishichang.infosysdesign.util.PageQueryUtil;
import com.caishichang.infosysdesign.util.PageResult;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface StrategyService {

    /**
     * 获取攻略列表（使用分页）
     *
     * @param pageUtil
     * @return
     */
    PageResult getStrategiesPage(PageQueryUtil pageUtil);

    /**
     * 根据搜索关键获取文章列表
     *
     * @param keyword 关键词
     * @param page 指定页数
     * @return 查询并分页的结果
     */
    PageResult getStrategiesPageBySearch(String keyword, int page);


    /**
     * 通过攻略id获取详情（用于查看攻略详情）
     *
     * @param strategyId 攻略id
     * @return 攻略详情
     */
    StrategyDetailVO getStrategyDetail(Long strategyId);

    /**
     * 筛选出符合条件的攻略详情
     *
     * @param strategy 攻略
     * @return 攻略详情
     */
    StrategyDetailVO getStrategyDetailVO(Strategy strategy);

    /**
     * 通过id获取攻略（用于修改攻略）
     */
    Strategy getStrategy(Long strategyId);


    /**
     * 获取指定页攻略列表
     *
     * @param page 页码
     * @return
     */
    PageResult getStrategiesForIndexPage(int page);



    /**
     * （用于查询攻略列表）
     *
     * @param strategyList
     * @return
     */
    List<StrategyListVO> getStrategyListVOsByStrategies(List<Strategy> strategyList);

    /**
     * 新增攻略
     *
     * @param strategy
     * @return
     */
    @Transactional
    boolean insertStrategy(Strategy strategy);

    /**
     * 修改攻略
     *
     * @param strategy
     * @return
     */
    @Transactional
    boolean updateStrategy(Strategy strategy);

    /**
     * 删除单（多）个攻略（通过攻略id）
     *
     * @param strategyId
     * @return
     */
    @Transactional
    boolean deleteStrategy(Long[] strategyId);

}
